package com.lcredu.entity;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * @author 黎长容
 * @date 2025-07-08 15:29
 */
public class Cart {
    //这里有一个集合存储商品项----这个的话模拟数据库
    private HashMap<Integer, CartItem> items = new HashMap<>();

//    private int totalNum;

    private BigDecimal cartTotalPrice = new BigDecimal(0);

    public HashMap<Integer, CartItem> getItems() {
        return items;
    }

    public boolean isEmpty() {
        return items.size() == 0;
    }

    /**
     * 清空购物车
     */
    public void clear() {
        items.clear();
    }


    /**
     * 删除购物车
     *
     * @param itemId
     */
    public void deleteItem(int itemId) {
//        Set<Integer> ids = items.keySet();
//        for (Integer id : ids) {
//            if (itemId == id) {
//                items.remove(id);
//            }
//        }
        items.remove(itemId);
    }


    /**
     * 更新购物车价格的方法
     *
     * @param id    传入的值
     * @param count 传入的数量
     */
    public void updateCount(int id, int count) {
        //根据这个id去找这个购物项
        Set<Integer> ids = items.keySet();
        for (Integer itemId : ids) {
            if (id == itemId) {
                CartItem item = items.get(itemId);
                if (item != null) {
                    //先修改数量
                    item.setCount(count);
                    //再修改总价格
                    //item.getCount可以确保是最新的值
                    item.setTotalPrice(item.getPrice().multiply(new BigDecimal(item.getCount())));
                }
            }
        }
    }


    /**
     * 返回购物车的总价
     *
     * @return
     */
    public BigDecimal getCartTotalPrice() {

        cartTotalPrice = new BigDecimal(0);

        Set<Map.Entry<Integer, CartItem>> entries = items.entrySet();
        for (Map.Entry<Integer, CartItem> entry : entries) {
            //一定要重新赋值!!!
            cartTotalPrice = cartTotalPrice.add(entry.getValue().getTotalPrice());
        }

        return cartTotalPrice;
    }


    //返回购物车总数
    public int getTotalNum() {
        int totalNum = 0;
        //遍历这个hashmap就知道总数了
        Set<Integer> keys = items.keySet();
        for (Integer id : keys) {
            totalNum += ((CartItem) items.get(id)).getCount();
        }
        return totalNum;
    }


    //添加家居
    public void addItem(CartItem cartItem) {
        CartItem item = items.get(cartItem.getId());
        //判断当前商品是否已经在购物车中了
        if (item == null) {
            //如果不存在
            items.put(cartItem.getId(), cartItem);
        } else {
            //如果存在
            //1.数量加一
            item.setCount(item.getCount() + 1);
            //2.价格增加
            item.setTotalPrice(item.getTotalPrice().add(item.getPrice()));
        }
    }

    @Override
    public String toString() {
        return "Cart{" +
                "items=" + items +
                '}';
    }
}
